package com.navinfo.platform.dataanalysis;

import com.navinfo.platform.common.dto.BaseApplication;
import com.navinfo.platform.common.service.IDataHandleService;
import com.navinfo.platform.common.service.ILoadDataService;
import com.navinfo.platform.dataanalysis.service.impl.AlarmDataHandleService;
import com.navinfo.platform.dataanalysis.service.impl.AlarmDataLoadService;
import org.apache.spark.sql.SparkSession;

/**
 *  告警周月统计入口，执行时传入三个参数： <br/>
 *  &nbsp;&nbsp;args_1：执行日期，yyyyMMdd格式，如20181201<br/>
 *  &nbsp;&nbsp;args_2：统计类型，数字格式，0周统计，1月统计<br/>
 *  &nbsp;&nbsp;args_3：RDD分区数，可选参数，默认为1024<br/>
 *
 * 20181201 0  意为：对2018年12月01日所在周的信息进行汇总等统计后保存至hdfs周表中<br/>
 * 20181201 1  意为：对2018年12月01日所在月的信息进行汇总等统计后保存至hdfs月表中<br/>
 *
 *  @author web 20181202
 */

public class AlarmWeekMonthApplication extends BaseApplication {

    public static void main(String[] args) {
        if(null==args || args.length<2){
            throw new IllegalArgumentException("请传入正确的参数......");
        }
        if(!args[0].matches("^[1-9]\\d{3}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$")){
            throw new IllegalArgumentException("请传入正确的日期......");
        }
        if(!args[1].matches("^[01]$")){
            throw new IllegalArgumentException("请传入正确的周月类型......");
        }
        if(args.length>2 && !args[2].matches("^\\d+$")){
            throw new IllegalArgumentException("请传入正确的分区数......");
        }

        new AlarmWeekMonthApplication().start(args);
    }

    @Override
    protected SparkSession.Builder getSpark() {
        return super.getSpark().appName("AlarmWeekMonthApplication");
    }

    /***
     * 指定配置文件的地址
     */
    @Override
    public String getFileName() {
        return "config/dataanalysis/dataanalysis.properties";
    }

    /***
     * 实现一个加载数据的类
     */
    @Override
    public ILoadDataService getLoadDataService() {
        return new AlarmDataLoadService();
    }

    /***
     * 实现一个处理业务逻辑的类
     */
    @Override
    public IDataHandleService getDataHandleService() {
        return new AlarmDataHandleService();
    }
}